#include "stock_data.h"
//#include "kline_lib.h"
#include <fstream>
#include <sstream>
#include <iostream>

std::vector<StockData> StockDataLoader::loadFromCSV(const std::string& filepath) {
    std::vector<StockData> data;
    std::ifstream file(filepath);
    
    if (!file.is_open()) {
        std::cerr << "无法打开文件: " << filepath << std::endl;
        return data;
    }

    std::string line;
    // 跳过表头
    std::getline(file, line);

    // 读取数据行
    while (std::getline(file, line)) {
        std::stringstream ss(line);
        std::string field;
        StockData row;

        // 解析每一列
        std::getline(ss, row.trade_date, ',');  // trade_date
        std::getline(ss, field, ',');           // trade_date (数字格式，跳过)
        std::getline(ss, row.ts_code, ',');     // ts_code
        
        std::getline(ss, field, ',');           // open
        row.open = std::stof(field);
        
        std::getline(ss, field, ',');           // high
        row.high = std::stof(field);
        
        std::getline(ss, field, ',');           // low
        row.low = std::stof(field);
        
        std::getline(ss, field, ',');           // close
        row.close = std::stof(field);
        
        std::getline(ss, field, ',');           // vol
        row.vol = std::stof(field);
        
        // std::getline(ss, field, ',');           // EMA12
        // row.ema12 = std::stof(field);
        
        // std::getline(ss, field, ',');           // EMA26
        // row.ema26 = std::stof(field);
        
        // std::getline(ss, field, ',');           // MACD
        // row.macd = std::stof(field);
        
        // std::getline(ss, field, ',');           // MACD_Signal
        // row.macd_signal = std::stof(field);
        
        // std::getline(ss, field, ',');           // MACD_Histogram
        // row.macd_histogram = std::stof(field);

        // TODO::这一段代码是有风险的, 万一又改了csv的数据结构, 又歪内存了, 就会崩溃, 而且一崩溃, 就不好找.
        

        data.push_back(row);
    }

    file.close();
    return data;
}

// std::vector<StockData> StockDataLoader::convertToKLineData(const std::vector<StockData>& stockData) {
//     return stockData;  // 直接返回原始数据，因为StockData已经包含了所有需要的K线信息
// } 